"""
1. 简答题
题目：
（1）根据需求编写计算机器（加法和除法）相应的测试用例
（2）在调用每个测试方法之前打印【开始计算】，在调用测试方法之后打印【计算结束】，调用完所有的测试用例最终输出【结束测试】
（3）【进阶】使用参数化与数据驱动

注意：
a、使用等价类，边界值，错误猜测等方法进行用例设计
b、用例中要添加断言，验证结果
c、灵活使用测试装置
"""

import pytest

mod_case_data = {
    "equivalence": [[4, 2, 2], [2, 4, 0.5]]
}


class Calculator:
    def add(self, x: int, y: int):
        return x + y

    def mod(self, x: int, y: int):
        return x / y


class TestCalculator:
    cal = Calculator()

    def setup(self):
        print("【开始计算】")

    def teardown(self):
        print("【计算结束】")

    def teardown_class(self):
        print("【结束测试】")

    @pytest.mark.parametrize("x,y,expected", [[1, 2, 3], [-1, -2, -3]])
    def test_add_1(self, x, y, expected):
        assert self.cal.add(x, y) == expected

    @pytest.mark.parametrize("x,y,expected", mod_case_data["equivalence"])
    def test_mod(self, x, y, expected):
        assert self.cal.mod(x, y) == expected
